#include <pthread.h>
#include<iostream>
#include <cstdio>
#include<unistd.h>
#include<vector>
/* void Showid(pthread_t tid)
 {
    printf("tid: %ld\n",tid);
 }
// 线程入口函数：接收一个整数参数并打印
void *print_num(void *arg) {
   std::string name=static_cast<const char*>(arg);// 解析参数
   int cnt=5;
   while(cnt)
   {
        std::cout<<"我是一个新线程，我的名字是："<<name<<std::endl;
        sleep(1);
        
   }
    return NULL;
}

int main() {
    pthread_t tid;  // 用于存储新线程ID
    int arg = 123;  // 传给线程的参数
    int ret;

    // 创建线程：使用默认属性，入口函数为print_num，参数为&arg
    ret = pthread_create(&tid, NULL, print_num, (void*)"thread-1");
    pid_t pid = getpid();  // 获取当前进程PID
    printf("当前进程的PID是：%d\n", pid);
    Showid(tid);
    if (ret != 0) {
        printf("pthread_create failed: %d\n", ret);  // 错误处理
        return 1;
    }

    pthread_join(tid, NULL);  // 等待线程结束
    return 0;
} */
int ticket=10000;
void* routine(void* args)
{
    char* name=static_cast<char*>(args);
    //一个模拟抢票的代码片段：
    usleep(10000);
    while(1)
    {
        if ( ticket > 0 ) {
            usleep(1000);
            printf("%s sells ticket:%d\n", name, ticket);
            ticket--;
        } else {
            break;
        }
    }
    
    return nullptr;
}


int main()
{
    std::vector<pthread_t> arr;
    int num=10;
    for(int i=0;i<num;i++)
    {
        pthread_t tid;
        char* name=(char*)malloc(64);
        snprintf(name,64,"thread-%d",i);
        int ret=pthread_create(&tid,nullptr,routine,name);
        if(ret!=0)
        {
            std::cout<<"pthread_create fail!"<<std::endl;
            exit(-1);
        }
        arr.push_back(tid);
    }
    for(int i=0;i<10;i++)
    {
        pthread_join(arr[i],nullptr);
    }
    return 0;
}